home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / mnight.c < prev    next >
C/C++ Source or Header  |  2000-05-04  |  19KB  |  505 lines

  1. /***************************************************************************
  2.  
  3. Mutant Night
  4.  
  5. driver by Leandro Dardini
  6.  
  7. TODO:
  8. - must do palette marking, it is overflowing at the moment
  9.  
  10. ***************************************************************************/
  11. #include "driver.h"
  12. #include "vidhrdw/generic.h"
  13.  
  14. WRITE_HANDLER( mnight_bgvideoram_w );
  15. WRITE_HANDLER( mnight_fgvideoram_w );
  16. WRITE_HANDLER( mnight_sprite_overdraw_w );
  17. WRITE_HANDLER( mnight_background_enable_w );
  18. int  mnight_vh_start(void);
  19. void mnight_vh_stop(void);
  20. void mnight_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  21.  
  22. extern unsigned char    *mnight_scrolly_ram;
  23. extern unsigned char    *mnight_scrollx_ram;
  24. extern unsigned char    *mnight_bgenable_ram;
  25. extern unsigned char    *mnight_spoverdraw_ram;
  26. extern unsigned char    *mnight_spriteram;
  27. extern unsigned char    *mnight_background_videoram;
  28. extern unsigned char    *mnight_foreground_videoram;
  29. extern size_t mnight_spriteram_size;
  30. extern size_t mnight_backgroundram_size;
  31. extern size_t mnight_foregroundram_size;
  32.  
  33. static int mnight_bank_latch = 255, main_cpu_num;
  34.  
  35. void mnight_init_machine(void)
  36. {
  37.     main_cpu_num = 0;
  38. }
  39.  
  40. int mnight_interrupt(void)
  41. {
  42.     return 0x00d7;    /* RST 10h */
  43. }
  44.  
  45. READ_HANDLER( mnight_bankselect_r )
  46. {
  47.     return mnight_bank_latch;
  48. }
  49.  
  50. WRITE_HANDLER( mnight_bankselect_w )
  51. {
  52.     unsigned char *RAM = memory_region(REGION_CPU1+main_cpu_num);
  53.     int bankaddress;
  54.  
  55.     if ( data != mnight_bank_latch )
  56.     {
  57.         mnight_bank_latch = data;
  58.  
  59.         bankaddress = 0x10000 + ((data & 0x7) * 0x4000);
  60.         cpu_setbank(1,&RAM[bankaddress]);     /* Select 8 banks of 16k */
  61.     }
  62. }
  63.  
  64.  
  65. static struct MemoryReadAddress readmem[] =
  66. {
  67.     { 0x0000, 0x7fff, MRA_ROM },
  68.     { 0x8000, 0xbfff, MRA_BANK1 },
  69.     { 0xc000, 0xf7ff, MRA_RAM },
  70.     { 0xf800, 0xf800, input_port_2_r },
  71.     { 0xf801, 0xf801, input_port_0_r },
  72.     { 0xf802, 0xf802, input_port_1_r },
  73.     { 0xf803, 0xf803, input_port_3_r },
  74.     { 0xf804, 0xf804, input_port_4_r },
  75.     { 0xfa00, 0xfa00, MRA_RAM },
  76.     { 0xfa01, 0xfa01, MRA_RAM },
  77.     { 0xfa02, 0xfa02, mnight_bankselect_r },
  78.     { 0xfa03, 0xfa03, MRA_RAM },
  79.     { 0xfa08, 0xfa09, MRA_RAM },
  80.     { 0xfa0a, 0xfa0b, MRA_RAM },
  81.     { 0xfa0c, 0xfa0c, MRA_RAM },
  82.     { -1 }  /* end of table */
  83. };
  84.  
  85.  
  86. static struct MemoryWriteAddress writemem[] =
  87. {
  88.     { 0x0000, 0xbfff, MWA_ROM },
  89.     { 0xc000, 0xd9ff, MWA_RAM },
  90.     { 0xda00, 0xdfff, MWA_RAM, &mnight_spriteram, &mnight_spriteram_size },
  91.     { 0xe000, 0xe7ff, mnight_bgvideoram_w, &mnight_background_videoram, &mnight_backgroundram_size }, // VFY
  92.     { 0xe800, 0xefff, mnight_fgvideoram_w, &mnight_foreground_videoram, &mnight_foregroundram_size }, //VFY
  93.     { 0xf000, 0xf5ff, paletteram_RRRRGGGGBBBBxxxx_swap_w, &paletteram },
  94.     { 0xf600, 0xf7ff, MWA_RAM },
  95.     { 0xfa00, 0xfa00, soundlatch_w },
  96.     { 0xfa01, 0xfa01, MWA_RAM },           // unknown but used
  97.     { 0xfa02, 0xfa02, mnight_bankselect_w },
  98.     { 0xfa03, 0xfa03, mnight_sprite_overdraw_w, &mnight_spoverdraw_ram },
  99.     { 0xfa08, 0xfa09, MWA_RAM, &mnight_scrollx_ram },
  100.     { 0xfa0a, 0xfa0b, MWA_RAM, &mnight_scrolly_ram },
  101.     { 0xfa0c, 0xfa0c, mnight_background_enable_w, &mnight_bgenable_ram },
  102.     { -1 }  /* end of table */
  103. };
  104.  
  105.  
  106. static struct MemoryReadAddress snd_readmem[] =
  107. {
  108.     { 0x0000, 0xbfff, MRA_ROM },
  109.     { 0xc000, 0xc7ff, MRA_RAM },
  110.     { 0xe000, 0xe000, soundlatch_r },
  111.     { 0xefee, 0xefee, MRA_NOP },
  112.     { -1 }  /* end of table */
  113. };
  114.  
  115.  
  116. static struct MemoryWriteAddress snd_writemem[] =
  117. {
  118.     { 0x0000, 0xbfff, MWA_ROM },
  119.     { 0xc000, 0xc7ff, MWA_RAM },
  120.     { 0xeff5, 0xeff6, MWA_NOP },               /* SAMPLE FREQUENCY ??? */
  121.     { 0xefee, 0xefee, MWA_NOP },               /* CHIP COMMAND ?? */
  122.     { -1 }  /* end of table */
  123. };
  124.  
  125. static struct IOWritePort snd_writeport[] =
  126. {
  127.     { 0x0000, 0x0000, YM2203_control_port_0_w },
  128.     { 0x0001, 0x0001, YM2203_write_port_0_w },
  129.     { 0x0080, 0x0080, YM2203_control_port_1_w },
  130.     { 0x0081, 0x0081, YM2203_write_port_1_w },
  131.     { -1 }  /* end of table */
  132. };
  133.  
  134.  
  135.  
  136. INPUT_PORTS_START( mnight )
  137.     PORT_START /* Player 1 controls */
  138.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  139.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY )
  140.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY )
  141.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY )
  142.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  143.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
  144.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  145.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  146.  
  147.     PORT_START /* Player 2 controls */
  148.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
  149.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_COCKTAIL )
  150.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_COCKTAIL )
  151.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_COCKTAIL )
  152.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
  153.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
  154.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  155.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  156.  
  157.     PORT_START
  158.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
  159.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
  160.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
  161.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
  162.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE )    /* keep pressed during boot to enter service mode */
  163.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  164.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
  165.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
  166.  
  167.     PORT_START /* DSW0 */
  168.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
  169.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  170.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  171.     PORT_DIPNAME( 0x02, 0x02, DEF_STR( Bonus_Life ) )
  172.     PORT_DIPSETTING(    0x02, "30k and every 50k" )
  173.     PORT_DIPSETTING(    0x00, "50k and every 80k" )
  174.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Difficulty ) )
  175.     PORT_DIPSETTING(    0x04, "Normal" )
  176.     PORT_DIPSETTING(    0x00, "Difficult" )
  177.     PORT_DIPNAME( 0x08, 0x08, "Free Game" )
  178.     PORT_DIPSETTING(    0x08, DEF_STR( Off )  )
  179.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  180.     PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet) )
  181.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  182.     PORT_DIPSETTING(    0x10, DEF_STR( Cocktail ) )
  183.     PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) )
  184.     PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
  185.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  186.     PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) )
  187.     PORT_DIPSETTING(    0x80, "2" )
  188.     PORT_DIPSETTING(    0xc0, "3" )
  189.     PORT_DIPSETTING(    0x40, "4" )
  190.     PORT_DIPSETTING(    0x00, "5" )
  191.  
  192.     PORT_START /* DSW1 */
  193.     PORT_SERVICE( 0x01, IP_ACTIVE_LOW )
  194.     PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
  195.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  196.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  197.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
  198.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  199.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  200.     PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
  201.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  202.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  203.     PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
  204.     PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
  205.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  206.     PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Coin_A ) )
  207.     PORT_DIPSETTING(    0x00, DEF_STR( 5C_1C ) )
  208.     PORT_DIPSETTING(    0x20, DEF_STR( 4C_1C ) )
  209.     PORT_DIPSETTING(    0x40, DEF_STR( 3C_1C ) )
  210.     PORT_DIPSETTING(    0x60, DEF_STR( 2C_1C ) )
  211.     PORT_DIPSETTING(    0xe0, DEF_STR( 1C_1C ) )
  212.     PORT_DIPSETTING(    0xc0, DEF_STR( 1C_2C ) )
  213.     PORT_DIPSETTING(    0xa0, DEF_STR( 1C_3C ) )
  214.     PORT_DIPSETTING(    0x80, DEF_STR( 1C_4C ) )
  215. INPUT_PORTS_END
  216.  
  217. INPUT_PORTS_START( arkarea )
  218.     PORT_START /* Player 1 controls */
  219.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
  220.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER1 )
  221.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER1 )
  222.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER1 )
  223.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER1 )
  224.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER1 )
  225.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  226.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  227.  
  228.     PORT_START /* Player 2 controls */
  229.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
  230.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
  231.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
  232.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
  233.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
  234.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
  235.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  236.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  237.  
  238.     PORT_START
  239.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
  240.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
  241.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
  242.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
  243.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE )    /* keep pressed during boot to enter service mode */
  244.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  245.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
  246.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
  247.  
  248.     PORT_START /* DSW0 */
  249.     PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) )
  250.     PORT_DIPSETTING(    0x00, DEF_STR( 3C_1C ) )
  251.     PORT_DIPSETTING(    0x01, DEF_STR( 2C_1C ) )
  252.     PORT_DIPSETTING(    0x03, DEF_STR( 1C_1C ) )
  253.     PORT_DIPSETTING(    0x02, DEF_STR( 1C_2C ) )
  254.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
  255.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  256.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  257.     PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
  258.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  259.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  260.     PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) )
  261.     PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
  262.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  263.     PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
  264.     PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
  265.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  266.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Bonus_Life ) )
  267.     PORT_DIPSETTING(    0x40, "50000 and every 50000" )
  268.     PORT_DIPSETTING(    0x00, "100000 and every 100000" )
  269.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Lives ) )
  270.     PORT_DIPSETTING(    0x80, "3" )
  271.     PORT_DIPSETTING(    0x00, "4" )
  272.  
  273.     PORT_START /* DSW1 */
  274.     PORT_SERVICE( 0x01, IP_ACTIVE_LOW )
  275.     PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
  276.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  277.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  278.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
  279.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  280.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  281.     PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
  282.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  283.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  284.     PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
  285.     PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
  286.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  287.     PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
  288.     PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
  289.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  290.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
  291.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  292.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  293.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
  294.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  295.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  296. INPUT_PORTS_END
  297.  
  298.  
  299.  
  300. static struct GfxLayout charlayout =
  301. {
  302.     8,8,     /* 8*8 characters */
  303.     1024,     /* 1024 characters */
  304.     4,         /* 4 bits per pixel */
  305.     {0,1,2,3}, /* the bitplanes are packed in one nibble */
  306.     {0, 4, 16384*8+0, 16384*8+4, 8, 12, 16384*8+8, 16384*8+12},
  307.     {16*0, 16*1, 16*2, 16*3, 16*4, 16*5, 16*6, 16*7},
  308.     8*16
  309. };
  310.  
  311. static struct GfxLayout spritelayout =
  312. {
  313.     16,16,     /* 16*16 characters */
  314.     1536,     /* 1536 sprites */
  315.     4,         /* 4 bits per pixel */
  316.     {0,1,2,3}, /* the bitplanes are packed in one nibble */
  317.     {0,  4,  0x18000*8+0,  0x18000*8+4,  8, 12,  0x18000*8+8, 0x18000*8+12,
  318.         16*8+0, 16*8+4, 16*8+0x18000*8+0, 16*8+0x18000*8+4, 16*8+8, 16*8+12, 16*8+0x18000*8+8, 16*8+0x18000*8+12},
  319.     {16*0, 16*1, 16*2, 16*3, 16*4, 16*5, 16*6, 16*7,
  320.         32*8+16*0, 32*8+16*1, 32*8+16*2, 32*8+16*3, 32*8+16*4, 32*8+16*5, 32*8+16*6, 32*8+16*7},
  321.     8*64
  322. };
  323.  
  324. static struct GfxLayout bigspritelayout =
  325. {
  326.     32,32,     /* 32*32 characters */
  327.     384,     /* 384 sprites */
  328.     4,         /* 4 bits per pixel */
  329.     {0,1,2,3}, /* the bitplanes are packed in one nibble */
  330.     {0,  4,  0x18000*8+0,  0x18000*8+4,  8, 12,  0x18000*8+8, 0x18000*8+12,
  331.         16*8+0, 16*8+4, 16*8+0x18000*8+0, 16*8+0x18000*8+4, 16*8+8, 16*8+12, 16*8+0x18000*8+8, 16*8+0x18000*8+12,
  332.          64*8+0, 64*8+4, 64*8+0x18000*8+0, 64*8+0x18000*8+4, 64*8+8, 64*8+12, 64*8+0x18000*8+8, 64*8+0x18000*8+12,
  333.         64*8+16*8+0, 64*8+16*8+4, 64*8+16*8+0x18000*8+0, 64*8+16*8+0x18000*8+4,
  334.         64*8+16*8+8, 64*8+16*8+12, 64*8+16*8+0x18000*8+8, 64*8+16*8+0x18000*8+12 },
  335.     {16*0, 16*1, 16*2, 16*3, 16*4, 16*5, 16*6, 16*7,
  336.         32*8+16*0, 32*8+16*1, 32*8+16*2, 32*8+16*3, 32*8+16*4, 32*8+16*5, 32*8+16*6, 32*8+16*7,
  337.         128*8+16*0, 128*8+16*1, 128*8+16*2, 128*8+16*3,
  338.         128*8+16*4, 128*8+16*5, 128*8+16*6, 128*8+16*7,
  339.         128*8+32*8+16*0, 128*8+32*8+16*1, 128*8+32*8+16*2, 128*8+32*8+16*3,
  340.         128*8+32*8+16*4, 128*8+32*8+16*5, 128*8+32*8+16*6, 128*8+32*8+16*7 },
  341.     8*64*4
  342. };
  343.  
  344.  
  345. static struct GfxDecodeInfo gfxdecodeinfo[] =
  346. {
  347.     { REGION_GFX1, 0, &spritelayout,     0*16, 16},
  348.     { REGION_GFX2, 0, &spritelayout,    16*16, 16},
  349.     { REGION_GFX2, 0, &bigspritelayout, 16*16, 16},
  350.     { REGION_GFX3, 0, &charlayout,      32*16, 16},
  351.     { -1} /* end of array */
  352. };
  353.  
  354.  
  355. static struct YM2203interface ym2203_interface =
  356. {
  357.     2,     /* 2 chips */
  358.     12000000/8, // lax 11/03/1999  (1250000 -> 1500000 ???)
  359.     { YM2203_VOL(25,25), YM2203_VOL(25,25)},
  360.     { 0 },
  361.     { 0 },
  362.     { 0 },
  363.     { 0 }
  364. };
  365.  
  366.  
  367. static struct MachineDriver machine_driver_mnight =
  368. {
  369.     {
  370.         {
  371.             CPU_Z80,
  372.             6000000,        /* 12000000/2 ??? */
  373.             readmem,writemem,0,0,    /* very sensitive to these settings */
  374.             mnight_interrupt,1
  375.         },
  376.         {
  377.             CPU_Z80 | CPU_AUDIO_CPU,
  378.             4000000,        /* 12000000/3 ??? */
  379.             snd_readmem,snd_writemem,
  380.             0,snd_writeport,
  381.             interrupt,2
  382.         },
  383.     },
  384.     60, 10000,            /* frames per second, vblank duration */
  385.     10,                /* single CPU, no need for interleaving */
  386.     mnight_init_machine,
  387.  
  388.     32*8, 32*8, { 0*8, 32*8-1, 4*8, 28*8-1},
  389.     gfxdecodeinfo,
  390.     48*16,48*16,
  391.     0,
  392.  
  393.     VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE,
  394.     0,
  395.     mnight_vh_start,
  396.     mnight_vh_stop,
  397.     mnight_vh_screenrefresh,
  398.  
  399.     0,0,0,0,
  400.     {
  401.         {
  402.             SOUND_YM2203,
  403.             &ym2203_interface
  404.         }
  405.     }
  406. };
  407.  
  408.  
  409. ROM_START( mnight )
  410.     ROM_REGION( 0x30000, REGION_CPU1 )
  411.     ROM_LOAD( "mn6-j19.bin",  0x00000, 0x8000, 0x56678d14 )
  412.     ROM_LOAD( "mn5-j17.bin",  0x10000, 0x8000, 0x2a73f88e )
  413.     ROM_LOAD( "mn4-j16.bin",  0x18000, 0x8000, 0xc5e42bb4 )
  414.     ROM_LOAD( "mn3-j14.bin",  0x20000, 0x8000, 0xdf6a4f7a )
  415.     ROM_LOAD( "mn2-j12.bin",  0x28000, 0x8000, 0x9c391d1b )
  416.  
  417.     ROM_REGION( 0x10000, REGION_CPU2 )
  418.     ROM_LOAD( "mn1-j7.bin",   0x00000, 0x10000, 0xa0782a31 )
  419.  
  420.     ROM_REGION( 0x30000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  421.     ROM_LOAD( "mn11-b20.bin", 0x00000, 0x4000, 0x4d37e0f4 )   // background tiles
  422.     ROM_CONTINUE(             0x18000, 0x4000 )
  423.     ROM_CONTINUE(             0x04000, 0x4000 )
  424.     ROM_CONTINUE(             0x1c000, 0x4000 )
  425.     ROM_LOAD( "mn12-b22.bin", 0x08000, 0x4000, 0xb22cbbd3 )
  426.     ROM_CONTINUE(             0x20000, 0x4000 )
  427.     ROM_CONTINUE(             0x0c000, 0x4000 )
  428.     ROM_CONTINUE(             0x24000, 0x4000 )
  429.     ROM_LOAD( "mn13-b23.bin", 0x10000, 0x4000, 0x65714070 )
  430.     ROM_CONTINUE(             0x28000, 0x4000 )
  431.     ROM_CONTINUE(             0x14000, 0x4000 )
  432.     ROM_CONTINUE(             0x2c000, 0x4000 )
  433.  
  434.     ROM_REGION( 0x30000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  435.     ROM_LOAD( "mn7-e11.bin",  0x00000, 0x4000, 0x4883059c )      // sprites tiles
  436.     ROM_CONTINUE(             0x18000, 0x4000 )
  437.     ROM_CONTINUE(             0x04000, 0x4000 )
  438.     ROM_CONTINUE(             0x1c000, 0x4000 )
  439.     ROM_LOAD( "mn8-e12.bin",  0x08000, 0x4000, 0x2b91445 )
  440.     ROM_CONTINUE(             0x20000, 0x4000 )
  441.     ROM_CONTINUE(             0x0c000, 0x4000 )
  442.     ROM_CONTINUE(             0x24000, 0x4000 )
  443.     ROM_LOAD( "mn9-e14.bin",  0x10000, 0x4000, 0x9f08d160 )
  444.     ROM_CONTINUE(             0x28000, 0x4000 )
  445.     ROM_CONTINUE(             0x14000, 0x4000 )
  446.     ROM_CONTINUE(             0x2c000, 0x4000 )
  447.  
  448.     ROM_REGION( 0x08000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  449.     ROM_LOAD( "mn10-b10.bin", 0x00000, 0x2000, 0x37b8221f )    // foreground tiles OK
  450.     ROM_CONTINUE(             0x04000, 0x2000 )
  451.     ROM_CONTINUE(             0x02000, 0x2000 )
  452.     ROM_CONTINUE(             0x06000, 0x2000 )
  453. ROM_END
  454.  
  455. ROM_START( arkarea )
  456.     ROM_REGION( 0x30000, REGION_CPU1 )
  457.     ROM_LOAD( "arkarea.008",  0x00000, 0x8000, 0x1ce1b5b9 )
  458.     ROM_LOAD( "arkarea.009",  0x10000, 0x8000, 0xdb1c81d1 )
  459.     ROM_LOAD( "arkarea.010",  0x18000, 0x8000, 0x5a460dae )
  460.     ROM_LOAD( "arkarea.011",  0x20000, 0x8000, 0x63f022c9 )
  461.     ROM_LOAD( "arkarea.012",  0x28000, 0x8000, 0x3c4c65d5 )
  462.  
  463.     ROM_REGION( 0x10000, REGION_CPU2 )
  464.     ROM_LOAD( "arkarea.013",  0x00000, 0x8000, 0x2d409d58 )
  465.  
  466.     ROM_REGION( 0x30000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  467.     ROM_LOAD( "arkarea.003",  0x00000, 0x4000, 0x6f45a308 )   // background tiles
  468.     ROM_CONTINUE(             0x18000, 0x4000 )
  469.     ROM_CONTINUE(             0x04000, 0x4000 )
  470.     ROM_CONTINUE(             0x1c000, 0x4000 )
  471.     ROM_LOAD( "arkarea.002",  0x08000, 0x4000, 0x051d3482 )
  472.     ROM_CONTINUE(             0x20000, 0x4000 )
  473.     ROM_CONTINUE(             0x0c000, 0x4000 )
  474.     ROM_CONTINUE(             0x24000, 0x4000 )
  475.     ROM_LOAD( "arkarea.001",  0x10000, 0x4000, 0x09d11ab7 )
  476.     ROM_CONTINUE(             0x28000, 0x4000 )
  477.     ROM_CONTINUE(             0x14000, 0x4000 )
  478.     ROM_CONTINUE(             0x2c000, 0x4000 )
  479.  
  480.     ROM_REGION( 0x30000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  481.     ROM_LOAD( "arkarea.007",  0x00000, 0x4000, 0xd5684a27 )   // sprites tiles
  482.     ROM_CONTINUE(             0x18000, 0x4000 )
  483.     ROM_CONTINUE(             0x04000, 0x4000 )
  484.     ROM_CONTINUE(             0x1c000, 0x4000 )
  485.     ROM_LOAD( "arkarea.006",  0x08000, 0x4000, 0x2c0567d6)
  486.     ROM_CONTINUE(             0x20000, 0x4000 )
  487.     ROM_CONTINUE(             0x0c000, 0x4000 )
  488.     ROM_CONTINUE(             0x24000, 0x4000 )
  489.     ROM_LOAD( "arkarea.005",  0x10000, 0x4000, 0x9886004d )
  490.     ROM_CONTINUE(             0x28000, 0x4000 )
  491.     ROM_CONTINUE(             0x14000, 0x4000 )
  492.     ROM_CONTINUE(             0x2c000, 0x4000 )
  493.  
  494.     ROM_REGION( 0x08000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  495.     ROM_LOAD( "arkarea.004",  0x00000, 0x2000, 0x69e36af2 ) // foreground tiles OK
  496.     ROM_CONTINUE(             0x04000, 0x2000 )
  497.     ROM_CONTINUE(             0x02000, 0x2000 )
  498.     ROM_CONTINUE(             0x06000, 0x2000 )
  499. ROM_END
  500.  
  501.  
  502.  
  503. GAME( 1987, mnight,  0, mnight, mnight,  0, ROT0, "UPL (Kawakus license)", "Mutant Night" )
  504. GAME( 1988?,arkarea, 0, mnight, arkarea, 0, ROT0, "UPL", "Ark Area" )
  505.